iT邦幫忙

2024 iThome 鐵人賽

DAY 7
1
Modern Web

後端菜雞仔想學 Laravel系列 第 7

API & RESTful API? 設計你的 API

  • 分享至 

  • xImage
  •  

API 是什麼?

常聽到「開 API 」,那「開 API 」是什麼意思?

API 的全名是 Application Programming Interface 的縮寫,扮演應用程式和應用程式之間的橋樑。

簡單來說,「開 API」就是後端在伺服器上設計一個介面,讓外部的應用程式或前端系統可以跟後端溝通。

就像開了一扇「門」,讓其他系統可以透過這個「門」來查資料、改資料或執行一些動作。

假設你有一個線上商店,前端的網站或手機 App 想要查詢產品資訊或是新增訂單,就需要透過這些 API 跟後端對話。
API 通常會有特定的路徑(像是 /api/products)和動作(GET、POST、PUT、DELETE 等等)。

這些動作代表不同的操作,例如:

  • GET /api/products:拿到產品列表
  • POST /api/orders:新增一筆訂單

所以只要前端知道怎麼用這些 API,就可以跟後端系統互動。

可以參考這篇文章:API 到底是什麼? 用白話文帶你認識


RESTful API 是什麼?

RESTful API 是一種設計風格,也是網路上很常用的一種「規則」,讓後端和前端或其他系統能夠很簡單地互相溝通。
RESTful API 擁有清楚又簡短的 URI,可讀性非常強,核心概念就是用一套「簡單的規則」來讓不同系統之間交換資料。

最重要的部分就是「資源」的概念。
資源可以是任何東西,像是「產品」、「訂單」或「使用者」。
RESTful API 就是用 URL(網址)來指向這些資源,然後用 HTTP 方法(也就是 GET、POST、PUT、DELETE 等等)來告訴系統你想對這些資源做什麼事。

範例

一般 API 可能會長得像以下:

  • GET /getAllItems:取得商品資料
  • GET /getItem/11:取得商品資料
  • POST /createItem:新增商品資料
  • POST /updateItem/:更新商品資料
  • POST /deleteItem/:刪除商品資料

但如果使用 RESTful API 的設計風格:

  • GET /api/products:取得產品列表
  • POST /api/products:新增產品
  • PUT /api/products/1:更新 ID 為 1 的產品資料
  • DELETE /api/products/1:刪除 ID 為 1 的產品

更多資訊可以參考文章:認識 RESTful API

簡單來說,RESTful API 就像是一種語言,讓前後端之間能夠「透過網址和方法」來進行對話。
每個 URL 對應到一個資源,並充分利用了 HTTP 的特性,讓資料傳遞變得很清楚也很有條理。

對於前端來說,這種方式也很方便,因為他們一看就能知道 API 怎麼用,大大減少了不必要的溝通和麻煩。


小食譜02:設計 API

我想做一個簡單的「線上產品瀏覽系統」,讓消費者可以透過這個網站線上查看產品的相關資訊。

定義資源

資源是系統中可以操作或查詢的資料,可以想像成系統的核心。
而我的「線上產品瀏覽系統」的核心資料就是「產品」。

路由設計

簡單來說,是你要用什麼 URL 路徑來查詢或操作這些資源。
例如:
DELETE /api/products/1:刪除 ID 為 1 的產品

可以想像成你要去一間商店買東西,你眼前只有一條路可以通往這個商店,而這條路就是「路由」。

在這裡還可以思考一下 URI 跟 URL 是什麼?

URI 是一個通用的識別和定位資源的概念,而 URL 則是 URI 的一種具體實現方式,用於指定資源的位址和定位方式。
參考文章:URI 跟URL差異

我會遵循 RESTful API 設計風格,在 api.php 這個檔案設定路由,而 api.php 檔案會放在「routes」這個目錄下,在我前面的文章 初步了解 Laravel 目錄結構 也有先提過。

備註

Laravel 11 的版本有大改動,沒有 api.php 這個檔案,需要額外手動新增,新增後一樣會在「routes」這個目錄下。

線上產品瀏覽系統的 API 規劃

Method URI Name Action
POST api/products/ product.store App\Http\Controllers\ProductController@store
GET api/products/ product.index App\Http\Controllers\ProductController@index
GET api/products/{product} product.show App\Http\Controllers\ProductController@show
PATCH api/products/{product} product.update App\Http\Controllers\ProductController@update
DELETE api/products/{product} product.destroy App\Http\Controllers\ProductController@destroy

請求和回應格式

請求格式通常是指「消費者或前端」發送給「後端」的資料格式,而回應格式則是「後端」回傳給「前端」的資料格式。
通常是以 JSON 格式來呈現,因為它容易讀取,並且和大部分系統兼容。

這個部份之後使用 Postman 測試 API 時,會比較有畫面感。


大家可以先思考一下你想使用 Laravel 做的功能的「核心」是什麼?
怎麼設計你的 API ?

下一篇要先來講一下一直還沒有提到的 MVC 架構!


上一篇
系統規劃流程,你的食譜在哪?
下一篇
Laravel 的 MVC 架構設計模式
系列文
後端菜雞仔想學 Laravel13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言